﻿
using ObserverPattern.Observer;

namespace ObserverPattern.Subject;

internal class Cat
{
    public void Maio()
    {
        Console.WriteLine($"{this.GetType().Name} Maio 。。。。");
        new Mouse().Run();
        new Baby().Cry();
        new Father().Roar();
        new Mother().Wisper();
        new Dog().Wang();
    }

    #region 使用面向对象的观察者模式
    private List<IObserver> _observers = new List<IObserver>();
    public void AddObserver(IObserver observer)
    {
        _observers.Add(observer);
    }

    public void MaioObserver()
    {
        Console.WriteLine($"{this.GetType().Name} MaioObserver 。。。。");
        foreach (IObserver observer in _observers)
        {
            observer.Action();
        }
    }
    #endregion

    #region 使用事件委托方式
    public event Action? MaioEventHandler;
    public void MaioEvent()
    {
        Console.WriteLine($"{this.GetType().Name} MaioEvent 。。。。");
        MaioEventHandler?.Invoke();
    } 
    #endregion

}
